﻿#pragma once
#include "XyNet/Global.h"

namespace XyNet
{
	class RpcArgument;

	/// rpc服务管理器，用于保存处理具体事务的服务
	class XYNET_API RpcService : noncopyable
	{
	protected:
		RpcService(const string& name, int id) : _name(name), _id(id) {}

	public:
		virtual ~RpcService() {}

		/// 获取名称
		inline const string& getName() const { return _name; }
		/// 获取id
		inline int getId() const { return _id; }

		/// 创建方法参数
		virtual shared_ptr<RpcArgument> createMethodArgument(int methodId) const = 0;
		/// 执行回调方法
		virtual void onMethod(int methodId, RpcArgument* argument) = 0;

	private:
		/// 名称
		string _name;
		/// id
		int _id;
	};
}